package com.yootk.test.ftp;

import com.yootk.common.util.FTPConnection;
import org.apache.commons.net.ftp.FTPClient;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

/**
 * FTP文件上传
 */
public class FTPUploadFile {

    public static void main(String[] args) throws Exception {
        String ftpPath = "/home/ftpadmin/ftp/upload/"; // 此目录为Linux已经存在的路径，但是子路径不存在
        FTPClient client = FTPConnection.getFTPClient(); // 获取FTP连接
        client.enterLocalPassiveMode(); // 采用被动模式
        client.setFileType(FTPClient.BINARY_FILE_TYPE); // 采用二进制传输
        client.setBufferSize(2048); // 设置上传的缓存大小
        if (!client.changeWorkingDirectory(ftpPath)) {  // 切换目录
            client.makeDirectory(ftpPath); // 目录的创建
        }
        File file = new File("F:" + File.separator + "muyan" + File.separator + "muyan_yootk.png"); // 要上传的文件
        // 所有的文件是以二进制数据流的形式进行传输的，所以一定要通过InputStream获取一个输入流
        InputStream input = new FileInputStream(file); // 文件输入流
        String tempName = ftpPath + file.getName(); // FTP文件保存名称
        String ftpFileName = new String(tempName.getBytes("UTF-8"), "ISO-8859-1");
        // 在进行文件保存的需要明确配置存储文件的名称，同时利用输入流进行数据的传输
        if (client.storeFile(ftpFileName, input)) {
            System.out.println("FTP文件上传成功！");
        } else {
            System.out.println("FTP文件上传失败！");
        }
        input.close(); // 传输完成后关闭输入流
        client.logout(); // 注销
    }
}
